var crypto = require('crypto');

module.exports = {
  saltMd5(str) {
    let buf = new Buffer(str + '');
    buf.forEach(salt => {
      str += crypto.randomBytes(salt).toString('hex');
    });
    return {
      salt: str.replace(buf.toString('utf-8'), ''),
      hash: crypto.createHash('md5').update(str).digest('hex')
    };
  },
  sha1(str) {
    return crypto.createHash('sha1').update(str).digest('hex');
  },
  md5(str, key) {
    return crypto.createHash('md5').update(str + (key || '')).digest('hex');
  },
  sha256(str) {
    return crypto.createHash('sha256').update(str).digest('hex');
  },
  sha512(str) {
    return crypto.createHash('sha512').update(str).digest('hex');
  },
  hmac(str, path) {
    let pem = fs.readFileSync(path);
    let key = pem.toString('ascii');
    let hmac = crypto.createHmac('sha1', key);
    let hash = hmac.update(str).digest('hex');
    return hash;
  },
  rsawithsha1(str, path) {
    // 判断传入的path是否是已读取的pem文件
    let pem = Buffer.isBuffer(path) ? path : fs.readFileSync(path);
    // 创建签名对象为rsa-sha1
    let signer = crypto.createSign('RSA-SHA1');
    // 对字符串进行签名加密
    signer.update(str);
    let hash = signer.sign(pem, 'base64');
    return hash;
  }
};
